package creatingPattern.singleton;

/**
 * 懒汉式单例模式实现
 * 设计意图：确保一个类只有一个实例，并提供一个全局访问点
 * 使用场景：当需要延迟加载实例，且对线程安全有要求时使用
 */
public class LazySingleton {
    /**
     * 单例实例
     * 设计意图：使用volatile关键字确保多线程环境下的可见性
     * 使用场景：在多线程环境下共享单例实例
     */
    private static volatile LazySingleton instance = null;

    /**
     * 私有构造函数
     * 设计意图：防止外部直接实例化
     * 使用场景：确保单例模式的实现
     */
    private LazySingleton() {
    }

    /**
     * 获取单例实例的方法
     * 设计意图：提供全局访问点，使用双重检查锁定确保线程安全
     * 使用场景：当需要获取单例实例时调用
     * @return 返回单例实例
     */
    public static LazySingleton getInstance() {
        if (instance == null) {
            synchronized (LazySingleton.class) {
                if (instance == null) {
                    instance = new LazySingleton();
                }
            }
        }
        return instance;
    }
}
